<?php
namespace App\Core\Entity\Awstats;

use Illuminate\Support\Facades\Cookie;
use App\Core\Entity\Cookie\Factory as CookieFactory;

class VisitEntity
{

    /**
     * 访问数据内部 key（独立访客）
     */
    const KEY_UV = 'uv';
    
    // 有效期（24 * 60）分钟（1天）
    private $validity_uv = 1440;

    /**
     * 制作 uv key
     *
     * @param string $key            
     * @return string
     */
    private function makeUvKey($key)
    {
        return CookieFactory::COOKIE_KEY_VISIT . ':' . self::KEY_UV . ':' . $key . ':' . date('md', time());
    }

    /**
     * 初始化 uv 状态
     *
     * @param string $key            
     * @param int $id            
     * @return void
     */
    public function initUv($key, $id)
    {
        $key = $this->makeUvKey($key);
        
        $ids = Cookie::get($key, []);
        if (! in_array($id, $ids)) {
            array_push($ids, $id);
        }
        
        Cookie::queue($key, $ids, $this->validity_uv);
    }

    /**
     * 检查 uv 是否已初始化
     *
     * @param string $key            
     * @param int $id            
     * @return boolean
     */
    public function hasUv($key, $id)
    {
        $key = $this->makeUvKey($key);
        
        $ids = Cookie::get($key, []);
        
        return in_array($id, $ids);
    }
}